
* Functions & variables part:
func card1() 
#(Pdegrade)
end

func card2() 
#(Pdegrade)
end

func g1() 
if ( 1<= (#(Pdegrade)+1) and (#(Pdegrade)+1) <=g  )
1
else
0
end
end

func g2() 
if ( g< (#(Pdegrade)+1) and (#(Pdegrade)+1)< b )
1
else
0
end
end

func g3() 
if ( b<= (#(Pdegrade)+1) and (#(Pdegrade)+1) <=K  )
1
else
0
end
end

func g4() 
if (  (#(Pinspection) == 0)  and (#(Pmaint) == 0) and (#(Pservice) > 0) and (#(Ppfail) == 0) )
1
else
0
end
end

func g5() 
if (  (#(Pinspection) == 0)  and (#(Pmaint) == 0) and (#(Pdegrade) <> K) and (#(Ppfail) == 0) )
1
else
0
end
end

func g6() 
if (  (#(Pdegrade) <> K) and (#(Pservice) > 0) and (#(Ppfail) == 0) )
1
else
0
end
end


bind 
N   4
K   5
lam   7
mu   1/(0.25)
lamD   0.03/5
lam0   0.03
mu0   1
g   2
b   4
end


srn model1(muD, lamIn, mum, muM, muIn)  
  * == PLACE == 
  Pjobs N
  Pservice 0
  Ppfail 0
  Pup K
  Pdegrade 0
  Pmaint 0
  Pclock 1
  Pinspection 0
  end
  * == Timed Transitions == 
  Tarrival ind lam 
  Tservice ind mu guard g5() 
  Tmrepair ind mu0 
  Tpfail ind lam0 guard g4() 
  Tdegrade ind K*lamD guard g4() 
  TMrepair ind muD guard g4() 
  Tinspinterval ind lamIn guard g6() 
  Tmmaint ind mum guard g2() 
  TMmaint ind muM guard g3() 
  Tinspection ind muIn 
  end
  * == Immediate Transitions ==  
  tnoaction ind 0.5 guard g1() priority 10 
  end
  * == ARC == 
  * Input Arcs 
  Pjobs Tarrival 1
  Pup Tpfail 1
  Ppfail Tmrepair 1
  Pservice Tservice 1
  Pup Tdegrade 1
  Pdegrade TMrepair K
  Pmaint tnoaction 1
  Pclock Tinspinterval 1
  Pinspection Tinspection 1
  Pmaint TMmaint 1
  Pdegrade TMmaint card1() 
  Pdegrade Tmmaint 1
  Pmaint Tmmaint 1
  end
  * Output Arcs 
  Tarrival Pservice 1
  Tservice Pjobs 1
  Tpfail Ppfail 1
  Tmrepair Pup 1
  Tdegrade Pdegrade 1
  TMrepair Pup K
  Tinspinterval Pinspection 1
  Tinspection Pmaint 1
  tnoaction Pclock 1
  TMmaint Pclock 1
  TMmaint Pup card2() 
  Tmmaint Pup 1
  Tmmaint Pclock 1
  end
  * Inhibtor Arcs 
end
func funcOutput(lamIn) tput(model1, Tservice; muD, lamIn, mum, muM, muIn)
loop paramLoop,1,50,1
  bind lamIn 1/paramLoop
  bind muD 1/2
  bind mum 1/.5
  bind muM 1/5
  bind muIn 1/40

  expr funcOutput(lamIn)
end
end 


